package com.huike.report.service.Impl;

import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.huike.report.domain.vo.LineChartVo;
import com.huike.report.domain.vo.LineSeriesVo;
import com.huike.report.mapper.ReportMapper;
import com.huike.report.result.ReportSalesOwnerShipStatisticsListData;
import com.huike.report.service.ReportService;
import org.ehcache.core.util.CollectionUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;

@Service
public class ReportServiceImpl implements ReportService {

//    @Resource
//    private ReportMapper reportMapper;

    /**
     * 统计时间段内的销售额
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
//    @Override
//    public LineChartVo statisticsMoney(String beginCreateTime, String endCreateTime) {
//        LineChartVo lineChartVo = new LineChartVo();
//        LineSeriesVo lineSeriesVo = new LineSeriesVo();
//        List<LineSeriesVo> lineSeriesVoList = new ArrayList<>();
//        lineSeriesVo.setName("销售统计");
//        // 获取日期的集合
//        List<LocalDate> dateList = getDateList(beginCreateTime, endCreateTime);
//        List<String> dateListStr = new ArrayList<>();
//        dateList.forEach(date -> {
//            String string = date.toString();
//            dateListStr.add(string);
//        });
//        // 为销售额做统计
//        List<Object> money = lineSeriesVo.getData();
//        // 获取最大时间和最小时间
//        dateList.forEach(date -> {
//            LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);
//            String begin = beginTime.toString();
//            LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);
//            String end = endTime.toString();
//            // 使用map集合存储数据，然后使用集合去数据库进行查询，获取销售额
//            Map map = new HashMap<>();
//            map.put("status", "4");
//            map.put("begin", begin);
//            map.put("end", end);
//            // 根据条件去查询
//            Double sum = reportMapper.sumMoney(map);
//            if (Objects.isNull(sum)) {
//                sum = 0.0;
//            }
//            money.add(sum);
//        });
//        lineSeriesVoList.add(lineSeriesVo);
//        // 设置数据
//        lineChartVo.setxAxis(dateListStr);
//        lineChartVo.setSeries(lineSeriesVoList);
//        return lineChartVo;
//    }

//    /**
//     * 销售归属人报表
//     *
//     * @param beginCreateTime
//     * @param endCreateTime
//     * @return
//     */
//    @Override
//    public List<ReportSalesOwnerShipStatisticsListData> statisticsByPeople(String beginCreateTime, String endCreateTime) {
//        // 创建接受对象的集合
//        List<ReportSalesOwnerShipStatisticsListData> list = new ArrayList<>();
//        // 创建对象
//        ReportSalesOwnerShipStatisticsListData re = new ReportSalesOwnerShipStatisticsListData();
//        // 先获取销售人集合
//        List<String> createBy = reportMapper.findCreateBy();
//        for (String by : createBy) {
//            list = reportMapper.statisticsByPeople(by);
//            if (CollectionUtils.isNotEmpty(list)) {
//                for (ReportSalesOwnerShipStatisticsListData res : list) {
//                    re.setTotal_amount(res.getTotal_amount());
//                    re.setCreate_by(res.getCreate_by());
//                }
//                list.add(re);
//            }
//        }
//        // 最后把对象封装到集合中
//        return list;
//    }

    /**
     * 获取时间列表方法
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    private List<LocalDate> getDateList(String beginCreateTime, String endCreateTime) {
        List<LocalDate> dateList = new ArrayList<>();
        LocalDate beginTime = LocalDate.parse(beginCreateTime);
        LocalDate endTime = LocalDate.parse(endCreateTime);
        dateList.add(beginTime);
        while (!beginTime.equals(endTime)) {
            // 获取日期内的每一天
            beginTime = beginTime.plusDays(1);
            dateList.add(beginTime);
        }
        return dateList;
    }
}
